package com.softer.chengxin.file.controller;

import com.softer.chengxin.common.domin.Common;
import com.softer.chengxin.common.domin.CommonResult;
import com.softer.chengxin.common.enums.ResultEnum;
import com.softer.chengxin.file.entity.FileDTO;
import com.softer.chengxin.file.entity.FileVO;
import com.softer.chengxin.file.service.FileService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Gong Zhiyang
 * @date 2018/10/10
 */
@RestController
@RequestMapping("/api/file")
public class FileController {

    private FileService fileService;

    @Autowired
    public FileController(FileService fileService) {
        this.fileService = fileService;
    }

    /**
     * 上传附件
     *
     * @param file    附件
     * @param fileDTO 上传信息
     * @param session 缓存
     * @return 结果
     */
    @PostMapping("/upload")
    public CommonResult upload(MultipartFile file, FileDTO fileDTO, HttpSession session) {

        // 查询企业ID
        Integer id = (Integer) session.getAttribute(Common.ID);
        if (id == null) {
            return new CommonResult(ResultEnum.FAIL.getCode(), "上传失败，请重新登陆系统后上传");
        }
        return fileService.upload(file, fileDTO, id);
    }

    /**
     * 通过文件类型查询文件
     *
     * @param fileDTO 查询实体
     * @return 文件信息
     */
    @PostMapping("/getFileList")
    public List<FileVO> getFileList(FileDTO fileDTO, HttpSession session) {
        Integer id;
        if (StringUtils.isBlank(fileDTO.getInfoId()) && StringUtils.isBlank(fileDTO.getPersonId()) && StringUtils.isBlank(fileDTO.getProjectId())) {
            fileDTO.setPersonId(Common.ZERO);
            fileDTO.setProjectId(Common.ZERO);
            fileDTO.setInfoId(Common.ZERO);
            // 查询企业ID
            id = (Integer) session.getAttribute(Common.ID);
            if (id == null) {
                return new ArrayList<>();
            }
        } else {
            id = null;
        }
        return fileService.getFileList(fileDTO, id);
    }

    /**
     * 企业端查询附件路径集合
     *
     * @param fileDTO 查询实体
     * @param request 缓存
     * @return 路径集合
     */
    @PostMapping("/getPath")
    public List<String> getPath(FileDTO fileDTO, HttpServletRequest request) {
        Integer id;
        if (StringUtils.isBlank(fileDTO.getInfoId()) && StringUtils.isBlank(fileDTO.getPersonId()) && StringUtils.isBlank(fileDTO.getProjectId())) {
            // 查询企业ID
            id = (Integer) request.getSession().getAttribute(Common.ID);
            if (id == null) {
                return new ArrayList<>();
            }
        } else {
            id = null;
        }
        String requestURL = request.getRequestURL().toString();
        String requestURI = request.getRequestURI();
        //保留域名和端口
        String replace = requestURL.replace(requestURI, "");
        return fileService.getPath(fileDTO, id, replace);
    }

    /**
     * 上传附件
     *
     * @param file    附件
     * @param fileDTO 上传信息
     * @param id      企业ID
     * @return 结果
     */
    @PostMapping("/zgUpload")
    public CommonResult zgUpload(MultipartFile file, FileDTO fileDTO, Integer id) {
        if (StringUtils.isBlank(fileDTO.getInfoId()) && StringUtils.isBlank(fileDTO.getPersonId()) && StringUtils.isBlank(fileDTO.getProjectId())) {
            if (id == null) {
                return new CommonResult(ResultEnum.FAIL.getCode(), "请先选择要添加的企业");
            }
        } else {
            id = null;
        }
        return fileService.upload(file, fileDTO, id);
    }

    /**
     * 主管部门通过文件类型查询文件
     *
     * @param fileDTO 查询实体
     * @param id      企业ID
     * @return 文件列表
     */
    @PostMapping("/getZgFileList")
    public List<FileVO> getZgFileList(FileDTO fileDTO, Integer id) {
        if (StringUtils.isBlank(fileDTO.getInfoId()) && StringUtils.isBlank(fileDTO.getPersonId()) && StringUtils.isBlank(fileDTO.getProjectId())) {
            fileDTO.setPersonId(Common.ZERO);
            fileDTO.setProjectId(Common.ZERO);
            fileDTO.setInfoId(Common.ZERO);
            if (id == null) {
                return new ArrayList<>();
            }
        }
        return fileService.getFileList(fileDTO, id);
    }

    /**
     * 删除附件
     *
     * @param id 附件ID
     * @return 删除结果
     */
    @PostMapping("/delete")
    public CommonResult delete(Integer id) {
        return fileService.delete(id);
    }
}
